package com.lagou.homework;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class StudentTest {
    public static void main(String[] args) {
        //1.定义HashMap集合,键为Student对象,值为地址是String类型的对象,
        // 在集合map中新建5个对象 k Student对象 v 为地址信息
        HashMap<Student, String> map = new HashMap<>();
        map.put(new Student("刘备", 21), "北京");
        map.put(new Student("张飞", 20), "西安");
        map.put(new Student("关羽", 19), "上海");
        map.put(new Student("赵云", 20), "青岛");
        map.put(new Student("孙权", 21), "兰州");

        //第一种方式：通过遍历所有的可以值，map.keySet()获取所有的key值，再通过key值获取所有的value（效率低）
        for (Student i : map.keySet()) {
            System.out.println("key:"+i+"  value:"+map.get(i));
        }

        System.out.println("---------------------");

        //第二种方式：通过map.entrySet()遍历key和value,（推荐，尤其是容量大的时候）
        for(Entry<Student, String> entry:map.entrySet()) {
            //map.entrySet()  返回此映射中包含的映射关系的Set视图
            //Map.Entry<Integer, String> 映射项 (键值对)
            System.out.println("key="+entry.getKey()+" value="+entry.getValue());
        }

        System.out.println("---------------------------");

        //第三种方式：map.entrySet获取键值对通过Iterator迭代器遍历
        Iterator<Entry<Student, String>> it=map.entrySet().iterator();
        while(it.hasNext()) {
            Entry<Student, String> entry=it.next();
            System.out.println("key="+entry.getKey()+" value="+entry.getValue());
        }

        System.out.println("----------------");
        //第四种方式：单独获取key和value值
        for(Student key:map.keySet()) {
            System.out.println("key="+key);
        }

        for(String value:map.values()) {
            System.out.println("value="+value);
        }

    }


}
